﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace Common
{
    public class Module_String
    {
        /// <summary> 
        /// 汉字转拼音缩写 
        /// </summary> 
        /// <param name="str">要转换的汉字字符串</param> 
        /// <returns>拼音缩写</returns> 
        public static string GetPYString(string str)
        {
            string tempStr = "";
            foreach (char c in str)
            {
                if ((int)c >= 33 && (int)c <= 126)
                {//字母和符号原样保留 
                    tempStr += c.ToString();
                }
                else
                {//累加拼音声母 
                    tempStr += GetPYChar(c.ToString());
                }
            }
            return tempStr;
        }

        /// <summary> 
        /// 取单个字符的拼音声母 
        /// </summary> 
        /// <param name="c">要转换的单个汉字</param> 
        /// <returns>拼音声母</returns> 
        public static string GetPYChar(string c)
        {
            byte[] array = new byte[2];
            array = System.Text.Encoding.Default.GetBytes(c);
            int i = (short)(array[0] - '\0') * 256 + ((short)(array[1] - '\0'));

            if (i < 0xB0A1) return "0";
            if (i < 0xB0C5) return "a";
            if (i < 0xB2C1) return "b";
            if (i < 0xB4EE) return "c";
            if (i < 0xB6EA) return "d";
            if (i < 0xB7A2) return "e";
            if (i < 0xB8C1) return "f";
            if (i < 0xB9FE) return "g";
            if (i < 0xBBF7) return "h";
            if (i < 0xBFA6) return "g";
            if (i < 0xC0AC) return "k";
            if (i < 0xC2E8) return "l";
            if (i < 0xC4C3) return "m";
            if (i < 0xC5B6) return "n";
            if (i < 0xC5BE) return "o";
            if (i < 0xC6DA) return "p";
            if (i < 0xC8BB) return "q";
            if (i < 0xC8F6) return "r";
            if (i < 0xCBFA) return "s";
            if (i < 0xCDDA) return "t";
            if (i < 0xCEF4) return "w";
            if (i < 0xD1B9) return "x";
            if (i < 0xD4D1) return "y";
            if (i < 0xD7FA) return "z";

            return "0";
        }

        /// <summary>
        /// 从String字符串中截取一部分，可以使用证则表达式
        /// </summary>
        /// <param name="getstr_str1">起始标记</param>
        /// <param name="getstr_str2">结束标记</param>
        /// <param name="getstr_str3">待截取的字符串</param>
        /// <returns></returns>
        public static string getstr(string getstr_str1, string getstr_str2, string getstr_str3)
        {
            Regex r = new Regex(@"" + getstr_str1 + "(.*?)" + getstr_str2 + "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
            Match m = r.Match(getstr_str3);
            if (m.Success) { return m.Groups[1].ToString(); } else { return "err"; }
        }

        /// <summary>
        /// 分割字符串
        /// </summary>
        /// <param name="splitstr_str1">待分割字符串</param>
        /// <param name="splitstr_str2">字符串分隔符</param>
        /// <returns></returns>
        public static string[] splitstr(string splitstr_str1, string splitstr_str2)
        {
            Regex rsplit = new Regex(@"" + splitstr_str2 + "");
            string[] temprsplitarr = rsplit.Split(splitstr_str1);
            return temprsplitarr;
        }

        /// <summary>
        /// 从String字符串中删除指定部分，可以使用正则表达式
        /// </summary>
        /// <param name="DelStr_str1">起始标记</param>
        /// <param name="DelStr_str2">结束标记</param>
        /// <param name="DelStr_str3">待截取的字符串</param>
        /// <returns></returns>
        public static string DelStr(string DelStr_str1, string DelStr_str2, string DelStr_str3)
        {
            string ruetemp = Regex.Replace(DelStr_str3, @"" + DelStr_str1 + ".*?" + DelStr_str2 + "", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
            return ruetemp;
        }

        /// <summary>
        /// 清理指定Html标记，但不删除Html标记中的内容
        /// </summary>
        /// <param name="getrepstr_str1">待清理的Html字符串</param>
        /// <param name="getrepstr_str2">标记名称</param>
        /// <returns></returns>
        public static string clearhtml(string getrepstr_str1, string getrepstr_str2)
        {
            string ruetemp = Regex.Replace(getrepstr_str1, @"<" + getrepstr_str2 + "[^>]*?>", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
            ruetemp = Regex.Replace(ruetemp, @"</" + getrepstr_str2 + ">", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
            return ruetemp;

        }

        /// <summary>
        /// 删除Html注释
        /// </summary>
        /// <param name="delremark_str1">待清理的Html字符串</param>
        /// <returns></returns>
        public static string delremark(string delremark_str1)
        {
            string ruetemp = Regex.Replace(delremark_str1, @"<!--.*?-->", "", RegexOptions.Singleline);
            return ruetemp;
        }

        /// <summary>
        /// 删除指定Html标记和其中的内容
        /// </summary>
        /// <param name="delhtml_str1">待删除的Html字符串</param>
        /// <param name="delhtml_str2">Html标记</param>
        /// <returns></returns>
        public static string delhtml(string delhtml_str1, string delhtml_str2)
        {
            string ruetemp = Regex.Replace(delhtml_str1, @"<" + delhtml_str2 + ".*?" + delhtml_str2 + ">", "", RegexOptions.Singleline | RegexOptions.IgnoreCase);
            return ruetemp;
        }

        /// <summary>
        /// 返回字符串的字节长度
        /// </summary>
        /// <param name="str">字符串</param>
        /// <returns></returns>
        public static int StrLength(string str)
        {
            int len = 0;
            for (int i = 0; i < str.Length; i++)
            {
                byte[] byte_len = System.Text.Encoding.Default.GetBytes(str.Substring(i, 1));
                if (byte_len.Length > 1)
                    len += 2;
                else
                    len += 1;
            }
            return len;
        }

        public static IList<int> ToInt32(IList<string> InputList)
        {
            IList<int> list = new List<int>();
            foreach (string str in InputList)
            {
                list.Add(ToInt32(str));
            }
            return list;
        }
        public static int ToInt32(string InputString)
        {
            return int.Parse(InputString);
        }
    }
}
